package br.com.fox.iebav.session;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.model.SelectItem;
import javax.inject.Named;

import br.com.fox.iebav.controller.command.LogarAreaRestrita;
import br.com.fox.iebav.controller.command.SalvarUsuario;
import br.com.fox.iebav.dao.NiveisDAO;
import br.com.fox.iebav.dao.StatusUsuariosDAO;
import br.com.fox.iebav.entity.Niveis;
import br.com.fox.iebav.entity.Statususuario;
import br.com.fox.iebav.entity.Usuarios;
import br.com.fox.iebav.session.abstractsession.AbstractSession;

@Named("usuarioBeanSession")
@SessionScoped
public class UsuarioBeanSession extends AbstractSession implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
//	ATRIBUTOS
	private List<Usuarios> usuariosList;
	private Usuarios usuarioSelecionado;
	private List<SelectItem> niveisList, statusList;

//	EJBs
	private @EJB NiveisDAO niveisdao;
	private @EJB StatusUsuariosDAO statusdao;
	
//	CONTROLLER COMMAND
	private @EJB SalvarUsuario salvarUsuario;
	private Map<String, Object> resultMap;
	
	
	@PostConstruct
	public void init()
	{
		setUsuarioSelecionado(new Usuarios());
		carregarUsuarios();
		redirecionarURL("usuarios.java");
	}		
	
	public void carregarUsuarios()
	{
		setUsuariosList( salvarUsuario.getUsuariosdao().findAll());
	}
	
	public void carregarNiveis()
	{
		setNiveisList(new ArrayList<SelectItem>());
		List<Niveis> list = niveisdao.findAll();
		for(Niveis n : list)
			getNiveisList().add( new SelectItem(n,n.getNome()) );
	}
	
	public void carregarStatus()
	{
		setStatusList(new ArrayList<SelectItem>());
		List<Statususuario> list = statusdao.findAll();
		for(Statususuario s : list)
			getStatusList().add( new SelectItem(s,s.getNome()) );
	}
	
	public void abrirUsuarioSelecionado()
	{
		carregarStatus();
		carregarNiveis();
		redirecionarURL("usuarioPersistencia.java");
	}
	
	public void novoUsuario()
	{
		setUsuarioSelecionado(new Usuarios());
		carregarStatus();
		carregarNiveis();
		redirecionarURL("usuarioPersistencia.java");
	}
	
	public void salvarUsuario()
	{
		resultMap = salvarUsuario.execute(getUsuarioSelecionado());
		if( ( (Boolean) resultMap.get("resultado") ) )
			facesMensagens(FacesMessage.SEVERITY_INFO,((String)resultMap.get("mensagem")),"");
		else
			facesMensagens(FacesMessage.SEVERITY_ERROR,((String)resultMap.get("mensagem")),"");
		carregarUsuarios();
	}

	public List<Usuarios> getUsuariosList() {
		return usuariosList;
	}

	public void setUsuariosList(List<Usuarios> usuariosList) {
		this.usuariosList = usuariosList;
	}

	public Usuarios getUsuarioSelecionado() {
		return usuarioSelecionado;
	}

	public void setUsuarioSelecionado(Usuarios usuarioSelecionado) {
		this.usuarioSelecionado = usuarioSelecionado;
	}

	public List<SelectItem> getNiveisList() {
		return niveisList;
	}

	public void setNiveisList(List<SelectItem> niveisList) {
		this.niveisList = niveisList;
	}

	public List<SelectItem> getStatusList() {
		return statusList;
	}

	public void setStatusList(List<SelectItem> statusList) {
		this.statusList = statusList;
	}
	
}
